﻿using com.ruovea.utilty;
using com.ruovea.utilty.rstring;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace GogsWeb.Api.Builde
{
    /// <summary>
    /// 
    /// </summary>
    public class ViewEdit
    {
        /// <summary>
        /// 初始化
        /// </summary>
        public static void Init()
        {
            SqlSugar.SqlSugarClient sc = new SqlSugar.SqlSugarClient(new SqlSugar.ConnectionConfig { ConnectionString = "Data Source=gogs.db", DbType = SqlSugar.DbType.Sqlite });
            var list = sc.DbMaintenance.GetTableInfoList();

            if (!Directory.Exists("BuildeFile/Vue/"))
            {
                Directory.CreateDirectory("BuildeFile/Vue/");
            }

            foreach (var t in list)
            {
                List<DbColumnInfo> dbColumns = sc.DbMaintenance.GetColumnInfosByTableName(t.Name);
                string modeName = Str.ToCamelAny(t.Name);
                string bodyStr = body(dbColumns);

                com.ruovea.vfile.FileHelper.CreateFile($"BuildeFile/Vue/{modeName}Edit.vue", bodyStr.GetBytes());
            }
        }


        /// <summary>
        /// 
        /// </summary>
        /// <param name="dbColumns"></param>
        /// <returns></returns>
        public static string body(List<DbColumnInfo> dbColumns)
        {
            StringBuilder sb = new StringBuilder();
            sb.AppendLine(" <template>                                                                                ");
            sb.AppendLine("  <Modal                                                                                   ");
            sb.AppendLine("    v-model=\"isshowmodal\"                                                                            ");
            sb.AppendLine("    :title=\"title\"                                                                                   ");
            sb.AppendLine("    :width=\"width\"                                                                                   ");
            sb.AppendLine("    :footer-hide=\"hidefooter\"                                                                        ");
            sb.AppendLine("    :loading=\"loading\"                                                                               ");
            sb.AppendLine("    :closable=\"hidefooter == true\"                                                                   ");
            sb.AppendLine("    :mask=\"true\"                                                                                     ");
            sb.AppendLine("    v-draggable=\"options\"                                                                            ");
            sb.AppendLine("    :sticky=\"true\"                                                                                   ");
            sb.AppendLine("    scrollable                                                                                         ");
            sb.AppendLine("    :mask-closable=\"false\"                                                                           ");
            sb.AppendLine("    class-name=\"vertical-center-modal\"                                                               ");
            sb.AppendLine("  >                                                                                                    ");
            sb.AppendLine("    <div>                                                                                              ");
            sb.AppendLine("      <Form :model=\"dataFrom\" :rules=\"rules\" ref=\"ruleForm\" :label-width=\"80\">                 ");

            List<DbColumnInfo> columns = dbColumns.Where(x => x.IsPrimarykey == false).ToList();
            sb.AppendLine("        <Row>                                                                                          ");

            int i = 1;
            foreach (var x in columns)
            {
                sb.AppendLine("                                                                                                       ");
                sb.AppendLine("          <Col span=\"12\">                                                                            ");
                sb.AppendLine("            <Form-item label=\"" + Str.ToCamelAny(x.DbColumnName) + "\">                                                               ");
                sb.AppendLine("              <Input v-model=\"dataFrom['" + Str.ToCamelAny(x.DbColumnName) + "']\" placeholder=\"请输入\"></Input>                    ");
                sb.AppendLine("            </Form-item>                                                                               ");
                sb.AppendLine("          </Col>                                                                                       ");



                if (i % 2 == 0)
                {
                    sb.AppendLine("        </Row>                                                                                         ");
                    sb.AppendLine("                                                                                                       ");
                    sb.AppendLine("        <Row>                                                                                          ");
                }

                i++;
            }
            //sb.AppendLine("          <Col span=\"12\">                                                                            ");
            //sb.AppendLine("            <Form-item label=\"组织编码\">                                                             ");
            //sb.AppendLine("              <Input v-model=\"dataFrom['OrgId']\" placeholder=\"请输入\"></Input>                     ");
            //sb.AppendLine("            </Form-item>                                                                               ");
            //sb.AppendLine("          </Col>                                                                                       ");
            //sb.AppendLine("                                                                                                       ");
            //sb.AppendLine("          <Col span=\"12\">                                                                            ");
            //sb.AppendLine("            <Form-item label=\"TeamId\">                                                               ");
            //sb.AppendLine("              <Input v-model=\"dataFrom['TeamId']\" placeholder=\"请输入\"></Input>                    ");
            //sb.AppendLine("            </Form-item>                                                                               ");
            //sb.AppendLine("          </Col>                                                                                       ");


            //sb.AppendLine("        </Row>                                                                                         ");
            //sb.AppendLine("                                                                                                       ");
            //sb.AppendLine("        <Row>                                                                                          ");


            //sb.AppendLine("          <Col span=\"12\">                                                                            ");
            //sb.AppendLine("            <Form-item label=\"RepoId\" prop=\"RepoId\">                                               ");
            //sb.AppendLine("              <InputNumber                                                                             ");
            //sb.AppendLine("                v-model=\"dataFrom['RepoId']\"                                                         ");
            //sb.AppendLine("                placeholder=\"请输入\"                                                                 ");
            //sb.AppendLine("              ></InputNumber>                                                                          ");
            //sb.AppendLine("            </Form-item>                                                                               ");
            //sb.AppendLine("          </Col>                                                                                       ");


            sb.AppendLine("        </Row>                                                                                         ");
            sb.AppendLine("      </Form>                                                                                          ");
            sb.AppendLine("    </div>                                                                                             ");
            sb.AppendLine("                                                                                                       ");
            sb.AppendLine("    <div slot=\"footer\">                                                                              ");
            sb.AppendLine("      <Button                                                                                          ");
            sb.AppendLine("        type=\"text\"                                                                                  ");
            sb.AppendLine("        size=\"large\"                                                                                 ");
            sb.AppendLine("        @click=\"handleClose(false)\"                                                                  ");
            sb.AppendLine("        :disabled=\"disabled\"                                                                         ");
            sb.AppendLine("        >取消</Button                                                                                  ");
            sb.AppendLine("      >                                                                                                ");
            sb.AppendLine("      <Button                                                                                          ");
            sb.AppendLine("        type=\"primary\"                                                                               ");
            sb.AppendLine("        size=\"large\"                                                                                 ");
            sb.AppendLine("        @click=\"handleSubmit\"                                                                        ");
            sb.AppendLine("        :loading=\"btnloading\"                                                                        ");
            sb.AppendLine("        :disabled=\"disabled\"                                                                         ");
            sb.AppendLine("        >确定</Button                                                                                  ");
            sb.AppendLine("      >                                                                                                ");
            sb.AppendLine("    </div>                                                                                             ");
            sb.AppendLine("    <div slot=\"close\">                                                                               ");
            sb.AppendLine("      <a><Icon type=\"ios-close\" @click=\"handleClose(false)\" /></a>                                 ");
            sb.AppendLine("    </div>                                                                                             ");
            sb.AppendLine("  </Modal>                                                                                             ");
            sb.AppendLine("</template>                                                                                            ");
            sb.AppendLine("<script>                                                                                               ");
            sb.AppendLine("import axios from \"@/libs/api.request\";                                                              ");
            sb.AppendLine("export default {                                                                                       ");
            sb.AppendLine("  // 父组件传来的值                                                                                    ");
            sb.AppendLine("  props: {                                                                                             ");
            sb.AppendLine("    baseuri: { type: String, default: \"\" },                                                          ");
            sb.AppendLine("    title: { type: String, default: \"操作\" },                                                        ");
            sb.AppendLine("    isshowmodal: { type: Boolean, default: false },                                                    ");
            sb.AppendLine("    hidefooter: { type: Boolean, default: false },                                                     ");
            sb.AppendLine("    width: { type: Number, default: 650 },                                                             ");
            sb.AppendLine("    index: { type: Number, default: -1 },                                                              ");
            sb.AppendLine("    tablekey: { type: String, default: null },                                                         ");
            sb.AppendLine("    keyId: { default: null },                                                                          ");
            sb.AppendLine("  },                                                                                                   ");
            sb.AppendLine("  data() {                                                                                             ");
            sb.AppendLine("    // 这里存放数据                                                                                    ");
            sb.AppendLine("    return {                                                                                           ");
            sb.AppendLine("      options: {                                                                                       ");
            sb.AppendLine("        trigger: \".ivu-modal-header\",                                                                ");
            sb.AppendLine("        body: \".ivu-modal\",                                                                          ");
            sb.AppendLine("        recover: true,                                                                                 ");
            sb.AppendLine("      },                                                                                               ");
            sb.AppendLine("      loading: false,                                                                                  ");
            sb.AppendLine("      btnloading: false,                                                                               ");
            sb.AppendLine("      disabled: false,                                                                                 ");
            sb.AppendLine("                                                                                                       ");
            sb.AppendLine("      dataFrom: { type: Object, default: {} },                                                         ");
            sb.AppendLine("      ruleForm: { RepoId: { type: Number } },                                                          ");
            sb.AppendLine("      rules: {                                                                                         ");
            sb.AppendLine("        RepoId: [                                                                                      ");
            sb.AppendLine("          {                                                                                            ");
            sb.AppendLine("            required: true,                                                                            ");
            sb.AppendLine("            message: \"RepoId不能为空\",                                                               ");
            sb.AppendLine("            trigger: \"blur\",                                                                         ");
            sb.AppendLine("            type: \"number\",                                                                          ");
            sb.AppendLine("          },                                                                                           ");
            sb.AppendLine("        ],                                                                                             ");
            sb.AppendLine("      },                                                                                               ");
            sb.AppendLine("    };                                                                                                 ");
            sb.AppendLine("  },                                                                                                   ");
            sb.AppendLine("  watch: {                                                                                             ");
            sb.AppendLine("    keyId(e) {                                                                                         ");
            sb.AppendLine("      if (e !== null) {                                                                                ");
            sb.AppendLine("        this.initdata(e);                                                                              ");
            sb.AppendLine("      }                                                                                                ");
            sb.AppendLine("    },                                                                                                 ");
            sb.AppendLine("  },                                                                                                   ");
            sb.AppendLine("  // 方法集合                                                                                          ");
            sb.AppendLine("  methods: {                                                                                           ");
            sb.AppendLine("    initdata: function (keyId) {                                                                       ");
            sb.AppendLine("      this.loading = true;                                                                             ");
            sb.AppendLine("      this.dataFrom = {};                                                                              ");
            sb.AppendLine("      // 初始化页面内容                                                                                ");
            sb.AppendLine("      axios                                                                                            ");
            sb.AppendLine("        .request({                                                                                     ");
            sb.AppendLine("          url: `${this.baseuri}?${this.tablekey}=` + keyId,                                                 ");
            sb.AppendLine("          method: \"get\",                                                                             ");
            sb.AppendLine("        })                                                                                             ");
            sb.AppendLine("        .then((res) => {                                                                               ");
            sb.AppendLine("          this.dataFrom = res.data.data;                                                               ");
            sb.AppendLine("        })                                                                                             ");
            sb.AppendLine("        .catch((error) => {                                                                            ");
            sb.AppendLine("          console.log(error);                                                                          ");
            sb.AppendLine("        })                                                                                             ");
            sb.AppendLine("        .finally((x) => {                                                                              ");
            sb.AppendLine("          this.loading = false;                                                                        ");
            sb.AppendLine("        });                                                                                            ");
            sb.AppendLine("    },                                                                                                 ");
            sb.AppendLine("                                                                                                       ");
            sb.AppendLine("    handleSubmit() {                                                                                   ");
            sb.AppendLine("      this.btnloading = this.disabled = true;                                                          ");
            sb.AppendLine("      this.$refs[\"ruleForm\"].validate((valid) => {                                                   ");
            sb.AppendLine("        if (valid) {                                                                                   ");
            sb.AppendLine("          if (this.keyId == null) {                                                                    ");
            sb.AppendLine("            this.add(this.dataFrom);                                                                   ");
            sb.AppendLine("          } else {                                                                                     ");
            sb.AppendLine("            this.update(this.dataFrom);                                                                ");
            sb.AppendLine("          }                                                                                            ");
            sb.AppendLine("        } else {                                                                                       ");
            sb.AppendLine("          this.$Message.error(\"表单验证失败!\");                                                      ");
            sb.AppendLine("          this.btnloading = this.disabled = false;                                                     ");
            sb.AppendLine("        }                                                                                              ");
            sb.AppendLine("      });                                                                                              ");
            sb.AppendLine("    },                                                                                                 ");
            sb.AppendLine("    handleReset() {                                                                                    ");
            sb.AppendLine("      this.$nextTick(() => {                                                                           ");
            sb.AppendLine("        this.$refs[\"ruleForm\"].resetFields();                                                        ");
            sb.AppendLine("      });                                                                                              ");
            sb.AppendLine("    },                                                                                                 ");
            sb.AppendLine("                                                                                                       ");
            sb.AppendLine("    add(data) {                                                                                        ");
            sb.AppendLine("      axios                                                                                            ");
            sb.AppendLine("        .request({                                                                                     ");
            sb.AppendLine("          url: this.baseuri,                                                                           ");
            sb.AppendLine("          method: \"post\",                                                                            ");
            sb.AppendLine("          data,                                                                                        ");
            sb.AppendLine("        })                                                                                             ");
            sb.AppendLine("        .then((res) => {                                                                               ");
            sb.AppendLine("          if (res.data.code === 200) {                                                                 ");
            sb.AppendLine("            this.$Message.success({                                                                    ");
            sb.AppendLine("              content: \"保存成功！\",                                                                 ");
            sb.AppendLine("              duration: 3,                                                                             ");
            sb.AppendLine("              closable: true,                                                                          ");
            sb.AppendLine("              onClose: () => {                                                                         ");
            sb.AppendLine("                this.handleClose(true);                                                                ");
            sb.AppendLine("                this.dataFrom = {};                                                                    ");
            sb.AppendLine("                this.btnloading = this.disabled = false;                                               ");
            sb.AppendLine("              },                                                                                       ");
            sb.AppendLine("            });                                                                                        ");
            sb.AppendLine("          } else {                                                                                     ");
            sb.AppendLine("            this.$Message.error({                                                                      ");
            sb.AppendLine("              content: res.data.msg,                                                                   ");
            sb.AppendLine("              duration: 2,                                                                             ");
            sb.AppendLine("              closable: true,                                                                          ");
            sb.AppendLine("              onClose: () => {                                                                         ");
            sb.AppendLine("                this.btnloading = this.disabled = false;                                               ");
            sb.AppendLine("              },                                                                                       ");
            sb.AppendLine("            });                                                                                        ");
            sb.AppendLine("          }                                                                                            ");
            sb.AppendLine("        })                                                                                             ");
            sb.AppendLine("        .catch(function (error) {});                                                                   ");
            sb.AppendLine("    },                                                                                                 ");
            sb.AppendLine("    update(data) {                                                                                     ");
            sb.AppendLine("      this.$Modal.confirm({                                                                            ");
            sb.AppendLine("        title: \"提示\",                                                                               ");
            sb.AppendLine("        content: \"确定提交修改?\",                                                                    ");
            sb.AppendLine("        onOk: () => {                                                                                  ");
            sb.AppendLine("          axios                                                                                        ");
            sb.AppendLine("            .request({                                                                                 ");
            sb.AppendLine("              url: this.baseuri,                                                                       ");
            sb.AppendLine("              method: \"put\",                                                                         ");
            sb.AppendLine("              data,                                                                                    ");
            sb.AppendLine("            })                                                                                         ");
            sb.AppendLine("            .then((res) => {                                                                           ");
            sb.AppendLine("              if (res.data.code === 200) {                                                             ");
            sb.AppendLine("                this.$Message.success({                                                                ");
            sb.AppendLine("                  content: \"保存成功！\",                                                             ");
            sb.AppendLine("                  duration: 3,                                                                         ");
            sb.AppendLine("                  closable: true,                                                                      ");
            sb.AppendLine("                  onClose: () => {                                                                     ");
            sb.AppendLine("                    this.handleClose(true);                                                            ");
            sb.AppendLine("                    this.btnloading = this.disabled = false;                                           ");
            sb.AppendLine("                  },                                                                                   ");
            sb.AppendLine("                });                                                                                    ");
            sb.AppendLine("              } else {                                                                                 ");
            sb.AppendLine("                this.$Message.error({                                                                  ");
            sb.AppendLine("                  content: res.data.msg,                                                               ");
            sb.AppendLine("                  duration: 2,                                                                         ");
            sb.AppendLine("                  closable: true,                                                                      ");
            sb.AppendLine("                  onClose: () => {                                                                     ");
            sb.AppendLine("                    this.btnloading = this.disabled = false;                                           ");
            sb.AppendLine("                  },                                                                                   ");
            sb.AppendLine("                });                                                                                    ");
            sb.AppendLine("              }                                                                                        ");
            sb.AppendLine("            })                                                                                         ");
            sb.AppendLine("            .catch(function (error) {});                                                               ");
            sb.AppendLine("        },                                                                                             ");
            sb.AppendLine("        onCancel: () => {                                                                              ");
            sb.AppendLine("          this.btnloading = this.disabled = false;                                                     ");
            sb.AppendLine("        },                                                                                             ");
            sb.AppendLine("      });                                                                                              ");
            sb.AppendLine("    },                                                                                                 ");
            sb.AppendLine("                                                                                                       ");
            sb.AppendLine("    // 关闭子页面                                                                                      ");
            sb.AppendLine("    handleClose(isok) {                                                                                ");
            sb.AppendLine("      this.$emit(\"on-close\", {                                                                       ");
            sb.AppendLine("        isok: isok,                                                                                    ");
            sb.AppendLine("        index: this.index,                                                                             ");
            sb.AppendLine("        dataFrom: this.dataFrom,                                                                       ");
            sb.AppendLine("      });                                                                                              ");
            sb.AppendLine("    },                                                                                                 ");
            sb.AppendLine("  },                                                                                                   ");
            sb.AppendLine("  // 监听属性 类似于data概念                                                                           ");
            sb.AppendLine("  computed: {},                                                                                        ");
            sb.AppendLine("};                                                                                                     ");
            sb.AppendLine("</script>                                                                                              ");
            sb.AppendLine("<style scoped>                                                                                         ");
            sb.AppendLine(".ml10 {                                                                                                ");
            sb.AppendLine("  margin-left: 10px;                                                                                   ");
            sb.AppendLine("}                                                                                                      ");
            sb.AppendLine(".vertical-center-modal {                                                                               ");
            sb.AppendLine("  display: flex;                                                                                       ");
            sb.AppendLine("  align-items: center;                                                                                 ");
            sb.AppendLine("  justify-content: center;                                                                             ");
            sb.AppendLine("}                                                                                                      ");
            sb.AppendLine(".ivu-modal {                                                                                           ");
            sb.AppendLine("  top: 30;                                                                                             ");
            sb.AppendLine("}                                                                                                      ");
            sb.AppendLine("</style>                                                                                               ");
            return sb.ToString();
        }
    }
}
